package com.situ.log;

import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.*;

public class LogDemo {

    @Test
    public void testQuick(){
        // 获取日志记录器对象
        Logger logger = Logger.getLogger("com.itheima.JULTest");
        // 日志记录输出
        logger.info("hello jul");

        // 通用方法进行日志记录
        logger.log(Level.INFO,"info msg");

        // 通过占位符 输出变量值

        String name = "itcast";
        Integer age = 13;
        logger.log(Level.INFO,"用户信息:{0},{1}",new Object[]{name,age});

    }

    @Test
    public void testLogLevel(){
        // 获取日志记录对象
        Logger logger = Logger.getLogger("com.itheima.JULTest");

        // 日志记录输出
        logger.severe("severe");
        logger.warning("warning");
        logger.info("info");
        // 默认只会输出以上三种日志信息
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");
    }

    @Test
    public void testLogLevelInfo() throws IOException {
        // 获取日志记录对象
        Logger logger = Logger.getLogger("com.itheima.JULTest");

        // 自定义日志级别

        // 创建ConsoleHandler
        ConsoleHandler consoleHandler = new ConsoleHandler();

        // 创建简单格式转化对象
        SimpleFormatter simpleFormatter = new SimpleFormatter();

        // 将console关联formatter对象
        consoleHandler.setFormatter(simpleFormatter);
        // 将handler对象添加到logger
        logger.addHandler(consoleHandler);

        // 配置日志具体级别
        logger.setLevel(Level.ALL);
        consoleHandler.setLevel(Level.ALL);

        // 场景FileHandler 文件输出
        FileHandler fileHandler = new FileHandler("src\\main\\java\\com\\situ\\log\\jul.log");
        fileHandler.setFormatter(simpleFormatter);

        // 进行关联
        fileHandler.setFormatter(simpleFormatter);
        logger.addHandler(fileHandler);

        // 日志记录输出
        logger.severe("severe");
        logger.warning("warning");
        logger.info("info");
        // 默认只会输出以上三种日志信息
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");

    }

    @Test
    public void testLogParent() throws Exception{
        Logger logger1 = Logger.getLogger("com.itheima");
        Logger logger2 = Logger.getLogger("com");

        // 测试
        System.out.println(logger1.getParent() == logger2);
        System.out.println("logger2Parent:"+logger2.getParent()+",name:"+logger2.getParent().getName());


        // 创建ConsoleHandler控制台输出
        ConsoleHandler consoleHandler = new ConsoleHandler();

        // 创建简单格式转换对象
        SimpleFormatter simpleFormatter = new SimpleFormatter();

        // 进行关联
        consoleHandler.setFormatter(simpleFormatter);
        logger2.addHandler(consoleHandler);

        // 关闭默认配置
        logger2.setUseParentHandlers(false);

        // 配置日志具体级别
        logger2.setLevel(Level.ALL);
        consoleHandler.setLevel(Level.ALL);


        // 日志记录输出
        logger2.severe("severe");
        logger2.warning("warning");
        logger2.info("info");
        // 默认只输出以上三种日志信息
        logger2.config("config");
        logger2.fine("fine");
        logger2.finer("finer");
        logger2.finest("finest");
    }
    // 加载自定义配置文件
    @Test
    public void testLogProperties() throws Exception {
        // 读取配置文件，通过类加载器
        InputStream inputStream = LogDemo.class.getClassLoader().getResourceAsStream("logging.properties");
        // 创建LogManager
        LogManager logManager = LogManager.getLogManager();
        // 通过LogManager加载器配置文件
        logManager.readConfiguration(inputStream);

        // 创建日志记录器
        Logger logger = Logger.getLogger("com.itheima");

        // 日志记录输出
        logger.severe("severe");
        logger.warning("warning");
        logger.info("info");
        // 默认只输出以上三种日志信息
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");


        Logger logger1 = Logger.getLogger(("test"));
        // 日志记录输出
        logger1.severe("severe test");
        logger1.warning("warning test");
        logger1.info("info test");
        // 默认只输出以上三种日志信息
        logger1.config("config test");
        logger1.fine("fine test");
        logger1.finer("finer test");
        logger1.finest("finest test");

    }
}
